#include<iostream>
#include<vector>
#include<cmath>
using namespace std;

const int N=5e5+100;

int a[N];
int f[N][20];

void init_st(int n,int *a){
	for(int i=1;i<=n;i++){
		f[i][0]=a[i]; 
	}
	for(int i=1;i<=20;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
		}
	}
}

int query_st(int l,int r){
	int len=r-l+1;
	int k=log2(len);
	
	return max(f[l][k],f[r-(1<<k)+1][k]);
} 


void solve(){
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	init_st(n,a);
	int l,r;
	while(q--){
		cin>>l>>r;
		cout<<query_st(l,r)<<endl;
	}
	
}

int main(){
	int t=1;
//	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}
